package common//数据库连接初始化文件 读操作使用 viper读取自定义配置文件
import (
	"fmt"
	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/mysql"
	"github.com/spf13/viper"
	"net/url"
)
var DB *gorm.DB//公共DB对象，定义一个全局变量，可以全局用
var StatDB  *gorm.DB//统计数据库
var CountDB  *gorm.DB//数据处理
func Initdb()*gorm.DB{
	driverName:=viper.GetString("database.driverName")// 这个是给连接起的名字
	host:=viper.GetString("database.host")//数据库连接地址，可以是Ip或者域名
	port:=viper.GetString("database.port")//数据库端口
	database:=viper.GetString("database.database")//数据库名
	statdatabase:=viper.GetString("database.statdatabase")
	countdatabase:=viper.GetString("database.countdatabase")
	username:=viper.GetString("database.username")//数据库账号
	password:=viper.GetString("database.password")//数据库密码
	charset:=viper.GetString("database.charset")//客户端字符集为utf8
	loc:=viper.GetString("database.loc")//使用系统本地时区
	args := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s&parseTime=true&loc=%s",
		username,
		password,
		host,
		port,
		database,
		charset,
		url.QueryEscape(loc),//记得这里要用url不要直接用loc
	)
	statargs:=fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s",
		username,
		password,
		host,
		port,
		statdatabase,
		charset)
	countargs:=fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s",
		username,
		password,
		host,
		port,
		countdatabase,
		charset)
	db, err := gorm.Open(driverName, args)//打开mysql连接
	StatDB,_=gorm.Open(driverName,statargs)
	CountDB,_=gorm.Open(driverName,countargs)
	if err != nil {
		panic("failed to connect database,err:" + err.Error())
	}
	DB=db
	return db
}
//获取gorm DB对象，其他包需要执行数据库查询的时候，只要通过common.getDB()获取db对象即可。
//不用担心协程并发使用同样的db对象会共用同一个连接，DB对象在调用他的方法的时候会从数据库连接池中获取新的连接
func GetDB()*gorm.DB{
	return DB
}

func GetStatDB()*gorm.DB{
	return StatDB
}
func GetCountDB()*gorm.DB{
	return CountDB
}

